﻿using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using SGQ.Model;
using SGQ.Controller;

namespace SGQ.View
{
    public partial class FormManterUsuario : Form
    {
        
        public FormManterUsuario()
        {
            InitializeComponent();
            init();
            
        }
        private ControllerDepartamento controlDpto;
        private Usuario user;
        private ControllerUser controlUser;
        private int codigo;
        public SessionApplication Session {get; set;}

        public void init() {
            limpaLabels();
            controlDpto = new ControllerDepartamento();
            user = new Usuario();
            user.Departamento = new Departamento();
            user.Login = new Login();
            controlUser = new ControllerUser();
            refresh();
        }

        private void refresh()
        {
            preecheDataGrid();
            preecheDptoCombo();
            limpaLabels();
        }

        private void preecheDptoCombo()
        {
            cbDepartament.DataSource = controlDpto.ListDataSet().Tables[0];
            cbDepartament.DisplayMember = "Descricao";
            cbDepartament.ValueMember = "Codigo";
        }

        private void preecheDataGrid()
        {
            dgUser.DataSource = controlUser.ListDataSet().Tables[0];
        }

        private void limpaLabels()
        {
            rbAdmin.Checked = false;
            rbCommom.Checked = true;
            tbName.Text = null;
            tbLogin.Text = null;
            tbPassword.Text = null;
            tbPasswordCorfirm.Text = null;
            //cbDepartament.Items.Clear();
            cbDepartament.SelectedIndex = -1;
            this.codigo = -1;
        }
        private void pegaValores() {
            user.Codigo = this.codigo;
            user.Departamento.Codigo = int.Parse(cbDepartament.SelectedValue.ToString());
            user.Departamento.Descricao = cbDepartament.Text;
            user.Login.Name = tbLogin.Text;
            user.Login.Senha = tbPassword.Text;
            if (rbAdmin.Checked)
            {
                user.Login.Tipo = 1;
            }
            else {
                user.Login.Tipo = 0;
            }
            user.Nome = tbName.Text;
        }

        private void preencheLabels()
        {
            this.codigo = user.Codigo;
            cbDepartament.SelectedValue = user.Departamento.Codigo;
            tbLogin.Text = user.Login.Name;
            //tbPassword.Text = user.Login.Senha;
            if (user.Login.Tipo == 1)
            {
                rbAdmin.Checked = true;
                rbCommom.Checked = false;
            }
            else
            {
                rbAdmin.Checked = false;
                rbCommom.Checked = true;
            }
            tbName.Text = user.Nome; 
        }

        private void inserirUser()
        {
            try
            {
                validaSenha();
                pegaValores();
                if (controlUser.Insert(user) == true)
                {
                    MessageCliente.MessageClient("Registro Inserido Com Sucesso");
                }
                else
                {
                    MessageCliente.MessageClient("Registro Não Foi Inserido");
                }

                limpaLabels();
                refresh();
            }
            catch (Exception e)
            {
                MessageCliente.MessageClient(e.Message);
            }
        }
        private void atualizarUser()
        {
            try
            {
                validaSenha();
                pegaValores();
                if (controlUser.Update(user) == true)
                {
                    MessageCliente.MessageClient("Registro Atualizado Com Sucesso");
                }
                else
                {
                    MessageCliente.MessageClient("Registro Não Foi Atualizado");
                }

                limpaLabels();
                refresh();
            }
            catch (Exception e)
            {
                MessageCliente.MessageClient(e.Message);
            }
        }

        private void removerUser()
        {
            try
            {
                pegaValores();
                if (controlUser.Delete(user) == true)
                {
                    MessageCliente.MessageClient("Registro Removido Com Sucesso");
                }
                else
                {
                    MessageCliente.MessageClient("Registro Não Foi Removido");
                }

                limpaLabels();
                refresh();
            }
            catch (Exception e)
            {
                MessageCliente.MessageClient(e.Message);
            }
        }

        public bool validaSenha() {
            if (tbPassword.Text.Equals(tbPasswordCorfirm.Text))
            {
                return true;
            }
            else
            {
                throw new Exception("Senhas não correspondem.");
            }
        }


        private void escolherDepartamento(DataGridViewCellEventArgs e)
        {
            user.Codigo = int.Parse(dgUser.Rows[e.RowIndex].Cells[0].Value.ToString());
            user.Departamento.Codigo = int.Parse(dgUser.Rows[e.RowIndex].Cells[5].Value.ToString());
            user.Nome = dgUser.Rows[e.RowIndex].Cells[1].Value.ToString();
            user.Login.Name = dgUser.Rows[e.RowIndex].Cells[2].Value.ToString();
            user.Login.Senha = dgUser.Rows[e.RowIndex].Cells[3].Value.ToString();
            if ("False" == dgUser.Rows[e.RowIndex].Cells[4].Value.ToString())
            {
                user.Login.Tipo = 0;
            }
            else
            {
                user.Login.Tipo = 1;
            }
            preencheLabels();
        }
        
        private void FormManterUsusrio_Load(object sender, EventArgs e)
        {
            refresh();
        }

        private void radioButton2_CheckedChanged(object sender, EventArgs e)
        {

        }

        private void comboBox1_SelectedIndexChanged(object sender, EventArgs e)
        {
            
        }

        private void lbPasswordConfirm_Click(object sender, EventArgs e)
        {

        }

        private void btOK_Click(object sender, EventArgs e)
        {
            pegaValores();
        }

        private void btRemover_Click(object sender, EventArgs e)
        {
            removerUser();
        }

        private void btListUsers_Click(object sender, EventArgs e)
        {
            refresh();
        }

        private void tbAddUser_Click(object sender, EventArgs e)
        {
            inserirUser();
        }

        private void dgUser_CellContentClick(object sender, DataGridViewCellEventArgs e)
        {
            escolherDepartamento(e);
        }

        private void btUpdateUser_Click(object sender, EventArgs e)
        {
            atualizarUser();
        }
    }
}
